Mathematical Algorithms

Table of Contents

不用除法和求模运算,判断一个数能否被3整除

method1

这个数的每一个位上的数字加起来后,和为3的倍数。每个位相加,然后不断减去3,看结果是不是等于0

bool parse(unsigned int n)
{
    char buffer[1024];
    int i,length;
    int sum = 0;
    if(n < 10)
    {
        if(n == 0 || n == 3 || n == 6 || n == 9)
            return true;
        else
            return false;
    }
    sprintf(buffer,"%d",n);
    length = strlen(buffer);
    for(i = 0; i != length; i++)
        sum += buffer[i] - '0';
    return parse(sum);
}

method2

3 = 0B11 如果a能被3整除,a=b×3,则a的最低位和b的最低位相同,a的次低位=b的次低位 +b的最低位,所以b的次低位=a的次低位-b的最低位,以此求出b。若不能则a不能被3整出

bool divideby3(int n)
{
  int temp;
  if(n < 0)
    n = -n;
  while(n > 0){
    temp = n & 1;
    n >>= 1;
    n = n - temp;
  }
  return (n == 0);
}

Author: Shi Shougang

Created: 2015-03-05 Thu 23:21

Emacs 24.3.1 (Org mode 8.2.10)

Validate